#include <dbg.h>
#include <gtest/gtest.h>

using namespace std;

class Solution {
public:
    bool canTransform(string start, string result) {
        // 去除 X 之后，L 和 R 的相对位置应该是一样的
        string s = start;
        string r = result;
        s.erase(remove(s.begin(), s.end(), 'X'), s.end());
        r.erase(remove(r.begin(), r.end(), 'X'), r.end());
        if (s != r) {
            return false;
        }

        // 遍历 start，遇到 L 或者 R 时，在 result 中找到第一个非 X 的位置，
        int indexStart = 0;
        int indexResult = 0;
        for (; indexStart < start.size(); ++indexStart) {
            if (start[indexStart] == 'X') {
                continue;
            }
            while (result[indexResult] == 'X') {
                ++indexResult;
            }

            if (indexStart != indexResult) {  // 相对位置不对
                dbg(indexStart, indexResult);
                if ((start[indexStart] == 'L' &&
                     indexStart < indexResult) /* L 只能向左移动 */
                    || (start[indexStart] == 'R' &&
                        indexStart > indexResult)) /* R 只能向右移动 */ {
                    return false;
                }
            }
            ++indexResult;
        }
        return true;
    }
};

TEST(TEST1_canTransform_Test, canTransform) {
    Solution solution;

    string start = "RXXLRXRXL";
    string result = "XRLXXRRLX";

    bool ans = solution.canTransform(start, result);

    EXPECT_EQ(ans, true);
}

TEST(TEST2_canTransform_Test, canTransform) {
    Solution solution;

    string start = "X";
    string result = "L";

    bool ans = solution.canTransform(start, result);

    EXPECT_EQ(ans, false);
}

TEST(TEST3_canTransform_Test, canTransform) {
    Solution solution;

    string start = "XXXXXLXXRX";
    string result = "LXXRXXXXXX";

    bool ans = solution.canTransform(start, result);

    EXPECT_EQ(ans, false);
}

int main(int argc, char** argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
